An interconnection network, such as, a ring, a bus, a point to point, or a mesh fabric, typically has independent message classes for forward progress or performance reasons. For example, one may group a particular type of messages into a message class to facilitate control and maintain different types of independent flow of each message class. Also, message classes may have different priorities and maintain that blockage in one message class does not prevent traffic flowing in another message class. Also, message classes may be executed at a link layer and allow for independent transmission channels to protocol layer agents. Some examples of message classes could be for snoop, data response, non-data response, special control functions, non-coherent, etc.
Additionally, a message in a particular class may be unordered with respect to other messages in the same class, and also with respect to other messages in different classes. Again, this may be for forward progress or for performance reasons. However, in some cases, there is a functional requirement that messages in different message classes maintain some kind of relative order. For example, in a cache coherence protocol, one may need to guarantee that a message corresponding to a particular cache line address cannot pass a previous message for the same cache line address sent in another message class to the same agent.
Presently, solutions do not exist for facilitating ordering of independent message classes sent between interconnects or segments of an interconnect network.